(function (angular) {
    'use strict';
    var componentModule = angular.module("fs.component");
    componentModule.config(['uibDatepickerPopupConfig', 'uibTimepickerConfig', 'uibPaginationConfig', function (datepickerPopupConfig, uibTimepickerConfig, paginationConfig) {
        datepickerPopupConfig.currentText = 'Biz Date';
        datepickerPopupConfig.clearText = 'Clear';
        datepickerPopupConfig.closeText = 'Close';
        datepickerPopupConfig.datepickerPopupTemplateUrl = 'fs/template/datepickerPopup/popup.html';
        datepickerPopupConfig.datepickerTemplateUrl = 'fs/template/datepicker/datepicker.html';
        uibTimepickerConfig.templateUrl = 'fs/template/timepicker/timepicker.html';
        paginationConfig.previousText = 'Previous';
        paginationConfig.nextText = 'Next';
        paginationConfig.firstText = 'First';
        paginationConfig.lastText = 'Last';
    }]);
    componentModule.config(['ChartJsProvider', function (ChartJsProvider) {
        ChartJsProvider.setOptions('global', {
            responsive: false
        });
        ChartJsProvider.setOptions('doughnut', {
            cutoutPercentage: 70
        });
        ChartJsProvider.setOptions('global', {
            colors: ['#00589b', '#018ddd', '#43c13f', '#fb8438', '#dcdcdc', '#f7464a', '#4d5360'],
            legend: {
                onClick: function (e, legendItem) {
                    e.isLegendClick = true;
                    var index = legendItem.datasetIndex;
                    var ci = this.chart;
                    var meta = ci.getDatasetMeta(index);
                    meta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null;
                    ci.update();
                },
                labels: {
                    legendHeight: 40,
                    boxWidth: 16,
                    paddingLeft: 8,
                    padding: 8,
                    usePointStyle: false,
                    generateLabels: function (chart) {
                        var data = chart.data, legendItems = [];
                        if (!angular.isArray(data.datasets)) {
                            return legendItems;
                        }
                        angular.forEach(data.datasets, function (dataset, i) {
                            if (!dataset.showInTooltip) {
                                legendItems.push({
                                    text: dataset.label,
                                    fillStyle: (!angular.isArray(dataset.backgroundColor) ? dataset.backgroundColor : dataset.backgroundColor[0]),
                                    hidden: !chart.isDatasetVisible(i),
                                    lineCap: 'square',
                                    lineDash: dataset.borderDash,
                                    lineDashOffset: dataset.borderDashOffset,
                                    lineJoin: dataset.borderJoinStyle,
                                    lineWidth: dataset.borderWidth,
                                    strokeStyle: dataset.borderColor,
                                    pointStyle: dataset.pointStyle,
                                    datasetIndex: i
                                });
                            }
                        });
                        return legendItems;
                    }
                }
            },
            tooltips: {
                enabled: true,
                custom: null,
                mode: 'nearest',
                position: 'average',
                intersect: true,
                backgroundColor: 'rgba(0,0,0,0.7)',
                titleFontStyle: 'bold',
                titleFontSize: 8,
                titleSpacing: 6,
                titleMarginBottom: 6,
                titleFontColor: 'rgba(255,255,255,0.7)',
                titleAlign: 'left',
                bodyFontStyle: 'bold',
                bodyFontSize: 10,
                bodySpacing: 6,
                bodyFontColor: '#fff',
                bodyAlign: 'left',
                footerFontStyle: 'bold',
                footerFontSize: 10,
                footerSpacing: 6,
                footerMarginTop: 6,
                footerFontColor: '#fff',
                footerAlign: 'left',
                yPadding: 6,
                xPadding: 6,
                caretPadding: 6,
                caretSize: 5,
                cornerRadius: 6,
                multiKeyBackground: '#fff',
                displayColors: true,
                borderColor: 'rgba(0,0,0,0.7)',
                borderWidth: 0
            },
            hover: {
                onHover: function (e) {
                    var me = this;
                    var isLegendHover = false;
                    var isChartHover = false;
                    // Chart event already has relative position in it
                    var x = e.offsetX;
                    var y = e.offsetY;
                    var l = me.legend;
                    if (y > me.chartArea.top) { //in the chart area
                        isChartHover = true;
                    } else {  //in the legend area
                        // See if we are touching one of the dataset boxes
                        var lh = l.legendHitBoxes;
                        for (var i = 0; i < lh.length; ++i) {
                            var hitBox = lh[i];

                            if (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {
                                isLegendHover = true;
                                break;
                            }
                        }
                    }
                    var element = null;
                    if (e.srcElement) {
                        element = e.srcElement;
                    } else if (e.target) {
                        element = e.target;
                    }
                    if (element) {
                        if (isLegendHover || (isChartHover && 'Y' != element.getAttribute('isDetailPage'))) {
                            element.style.cursor = 'pointer';
                        } else {
                            element.style.cursor = 'auto';
                        }
                    }
                }
            }
        });
        ChartJsProvider.setOptions('bar', {
            scales: {
                xAxes: [{
                    categoryPercentage: 0.6,
                    barPercentage: 0.7,
                }]
            }
        });
        ChartJsProvider.setOptions('horizontalBar', {
            scales: {
                xAxes: [{
                    categoryPercentage: 0.6,
                    barPercentage: 0.7,
                }]
            }
        });
    }]);
})(angular);